package com.adisi.bd;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.adisi.objetos.Proceso;

public class ProcesoDatos {

	/**
	 * Obtiene una lista de todas los procesos cargados en el sistema
	 * 
	 * @return List<Proceso>
	 */
	public List<Proceso> conseguirTodosLosProcesos() {
		List<Proceso> listado = new ArrayList<Proceso>();
		Connection con = null;
		Coneccion coneccion = new Coneccion();
		ResultSet rs = null;
		
		CallableStatement sp = null;
		
		try {
			con = coneccion.conectar();
			
			sp = con.prepareCall("{call sp_Proceso_Select_All}");
			
			sp.execute();
			
			rs = sp.getResultSet();
			
			while (rs.next()) {
				
			Proceso proceso = new Proceso(
						rs.getInt("id_proceso"), 
						rs.getString("nombre"),
						rs.getString("detalle"),
						rs.getString("grupo"));				

				listado.add(proceso);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				rs.close();
				sp.close();
				con.close();
			} catch (SQLException e) {
				System.out.println("problema al cerrar");
			}
		}
		return listado;
	}

	/**
	 * Obtiene una lista de todas los procesoes cargados a un usuario
	 * 
	 * @param int
	 * 
	 * @return List<Proceso>
	 */
	public List<Proceso> conseguirTodosLosProcesos(int idPerfil) {
		List<Proceso> listado = new ArrayList<Proceso>();
		Connection con = null;
		Coneccion coneccion = new Coneccion();
		ResultSet rs = null;
		
		CallableStatement sp = null;
		
		try {
			con = coneccion.conectar();
			
			sp = con.prepareCall("{call sp_Perfil_Proceso_Select_x_Perfil(?)}");
			sp.setInt("id_perfil", idPerfil);
			sp.execute();
			
			rs = sp.getResultSet();
			
			while (rs.next()) {
				
			Proceso proceso = new Proceso(
						rs.getInt("id_proceso"), 
						rs.getString("nombre"),
						rs.getString("detalle"),
						rs.getString("grupo"));				

				listado.add(proceso);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				rs.close();
				sp.close();
				con.close();
			} catch (SQLException e) {
				System.out.println("problema al cerrar");
			}
		}
		return listado;
	}

	
	
	/**
	 * Obtiene los datos de 1 Proceso
	 * 
	 * @param int
	 * 
	 * @return Proceso
	 */
	public Proceso conseguirUnProceso(int idProceso) {
		
		Proceso proceso = null;
		Connection con = null;
		Coneccion coneccion = new Coneccion();
		ResultSet rs = null;
		
		CallableStatement sp = null;
		
		try {
			con = coneccion.conectar();
			
			sp = con.prepareCall("{call sp_Proceso_Select_x_Id(?)}");
			sp.setInt(1, idProceso);
			sp.execute();
			
			rs = sp.getResultSet();
			while (rs.next()) {
					proceso = new Proceso(
						rs.getInt("id_proceso"), 
						rs.getString("nombre"),
						rs.getString("detalle"),
						rs.getString("grupo"));

			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				rs.close();
				sp.close();
				con.close();
			} catch (SQLException e) {
				System.out.println("problema al cerrar");
			}
		}
		return proceso;
	}

	
	/**
	 * Obtiene los datos de 1 Proceso
	 * 
	 * @param String
	 * 
	 * @return Proceso
	 */
	public Proceso conseguirUnProceso(String nombreProceso) {
		
		Proceso proceso = null;
		Connection con = null;
		Coneccion coneccion = new Coneccion();
		ResultSet rs = null;
		
		CallableStatement sp = null;
		
		try {
			con = coneccion.conectar();
			
			sp = con.prepareCall("{call sp_Proceso_Select_x_Nombre(?)}");
			sp.setString(1, nombreProceso);
			sp.execute();
			
			rs = sp.getResultSet();
			while (rs.next()) {
					proceso = new Proceso(
						rs.getInt("id_proceso"), 
						rs.getString("nombre"),
						rs.getString("detalle"),
						rs.getString("grupo"));

			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				rs.close();
				sp.close();
				con.close();
			} catch (SQLException e) {
				System.out.println("problema al cerrar");
			}
		}
		return proceso;
	}
	
	
	
}
